ci: test Java SDK across JDK matrix + platforms#309
Conversation
|
Warning Review limit reached
More reviews will be available in 28 minutes and 45 seconds. Learn how PR review limits work. Your organization has run out of usage credits. Purchase more credits in the billing tab to continue. ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits. 🚦 How do rate limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughThe PR updates shared Java setup steps to ChangesJava CI and publish updates
Sequence Diagram(s)sequenceDiagram
participant NativeJob as native job
participant CargoBuild as cargo build --release
participant ArtifactStore as GitHub artifact store
participant TestJob as test job
participant Gradle as ./gradlew build -x cargoBuild
NativeJob->>CargoBuild: build JNI cdylib with features
CargoBuild-->>NativeJob: produce .so artifact
NativeJob->>ArtifactStore: upload .so artifact
TestJob->>ArtifactStore: download native artifact into target/release
TestJob->>Gradle: run build on JDK 11/17/21
Gradle-->>TestJob: build and test results
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
What
actions/setup-java@v4→v5(Node 24; clears the Node 20 deprecation warning).Why
SDK targets Java 11 but is consumed on 11/17/21 and loads a native JNI binary — JVM behaviour is runtime-sensitive (JPMS encapsulation,
SecurityManagerremoval in 21+, reflection). Green on one JDK/platform is not green on all.Design (optimized)
The cdylib is JDK-independent, so on Linux it's built once and handed to every JDK leg as an artifact — no per-leg cargo rebuild:
nativejob:cargo build -p taskito-java --features postgres,redis,workflows→ uploadslibtaskito_java.so.testmatrix[11, 17, 21],fail-fast: false: downloads the.so, runs./gradlew build -x cargoBuild. No Rust on test legs;copyNativestill stages the prebuilt library.smokematrix[osx-aarch64, windows-x86_64]on JDK 21: native binary is platform-specific (.dylib/.dll), so these legs run the realcargoBuild+ full suite. Windows pointsOPENSSL_SRC_PERLat Strawberry Perl for vendored OpenSSL.Feature flags match: the
nativejob's--features postgres,redis,workflowsmirrors Gradle'scargoBuild(build.gradle.kts:103) exactly, so the artifact reused on Linux is what a realgradle build/ the publish pipeline ships.Verification (live in this PR's checks)
Java / Build native library✅Java / Java SDK Tests (JDK 11 | 17 | 21)✅ — artifact upload → download round-trip exercised; downloaded.soresolved wherecopyNativeexpects (repo-roottarget/release).Java / Java SDK Smoke (osx-aarch64)✅Java / Java SDK Smoke (windows-x86_64)✅ — real cargoBuild + vendored OpenSSL on Windows.Notes
Java / Build native libraryJava / Java SDK Tests (JDK 11),(JDK 17),(JDK 21)Java / Java SDK Smoke (osx-aarch64),(windows-x86_64)Java / Java SDK Tests.linux-aarch64+osx-x86_64remain publish-only (built inpublish-java.yml, not CI-gated).smokeis the heavy leg (full build + Rust-from-scratch + Windows OpenSSL-from-source, a known flakiness source). Intentional; worth watching.